#ifndef __LIB_AGORA_ADMIN_ICHANNEL_H__
#define __LIB_AGORA_ADMIN_ICHANNEL_H__

#include <list>
#include <string>
#include "IUser.h"
#include "IChannelRight.h"

class	IChannel
{
public:
	virtual const unsigned int	GetId(void) const = 0;
	virtual const unsigned int	SetId(const unsigned int) = 0;
	virtual IChannel*			GetParent(void) const = 0;
	virtual const unsigned int	SetParent(IChannel*) = 0;
	//virtual const unsigned int	SetParent(const unsigned int) = 0;
	//virtual const unsigned int	SetParent(const std::string&) = 0;
	//virtual const unsigned int	UnSetParent(void) = 0;
	virtual const bool			HaveParent(void) const = 0;
	virtual const std::string&	GetName(void) const = 0;
	virtual const unsigned int	SetName(const std::string&) = 0;
	virtual const unsigned int	GetMaxNameLength(void) const = 0;
	virtual const unsigned int	SetMaxNameLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetPassword(void) const = 0;
	virtual const unsigned int	SetPassword(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxPasswordLength(void) const = 0;
	virtual const unsigned int	SetMaxPasswordLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetMotd(void) const = 0;
	virtual const unsigned int	SetMotd(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxMotdLength(void) const = 0;
	virtual const unsigned int	SetMaxMotdLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetDescription(void) const = 0;
	virtual const unsigned int	SetDescription(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxDescriptionLength(void) const = 0;
	virtual const unsigned int	SetMaxDescriptionLength(const unsigned int, bool) = 0;
	virtual const bool			GetVisibility(void) const = 0;
	virtual const unsigned int	SetVisibility(const bool, bool) = 0;
	virtual const unsigned int	GetMaxUser(void) const = 0;
	virtual const unsigned int	SetMaxUser(const unsigned int, bool) = 0;
	virtual const unsigned int	GetMaxTalker(void) const = 0;
	virtual const unsigned int	SetMaxTalker(const unsigned int, bool) = 0;

	virtual const unsigned int					DeleteChannel(void) = 0;
	virtual const unsigned int					AddChannelChild(IChannel*) = 0;
	virtual const unsigned int					RemoveChannelChild(IChannel*) = 0;
	//virtual std::list<IChannel*>&				GetChannelChild(void) const = 0;
	virtual std::list<IChannel*>*				GetChannelChild(void) = 0;
	virtual const unsigned int					AddUser(IUser*) = 0;
	virtual const unsigned int					RemoveUser(IUser*) = 0;
	virtual const unsigned int					SubscribeUser(IUser*, IChannelRight*) = 0;
	virtual const unsigned int					UnSubscribeUser(IUser*) = 0;
	//virtual std::list<IUser*>&					GetUser() const = 0;
	virtual std::list<IUser*>*					GetUser() = 0;
};

#endif